package com.smart_campus.sys.controller;

import com.smart_campus.sys.common.Constant;
import com.smart_campus.sys.common.DataGridView;
import com.smart_campus.sys.common.ResultObj;
import com.smart_campus.sys.domain.Dept;
import com.smart_campus.sys.service.DeptService;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @author Alfred
 * @date 2020/6/12 11:34
 */
@RequestMapping("dept")
@RestController
public class DeptController {

    @Autowired
    private DeptService deptService;

    /**
     * 查询部门
     * @return
     */
    @RequestMapping("loadAllDept")
    public Object loadAllDept(Dept dept){
        return this.deptService.queryAllDept(dept);
    }

    /**
     * 查询最大的排序码
     * @return
     */
    @RequestMapping("queryDeptMaxOrderNum")
    public Object queryDeptMaxOrderNum(){
        Integer maxValue = this.deptService.queryDeptMaxOrderNum();
        return new DataGridView(maxValue+1);
    }

    /**
     * 添加菜单
     * @param dept
     * @return
     * @RequiresPermissions 只有当用户拥有这个权限的时候才能访问这个方法
     */
    @PostMapping("addDept")
    @RequiresPermissions("dept:add")
    public ResultObj addDept(Dept dept){
        try {
            //添加菜单设置为可用1是可用0不可用
            dept.setAvailable(Constant.AVAILABLE_TRUE);
            //添加菜单设置为展开1是展开0不展开
            dept.setSpread(Constant.SPREAD_TRUE);
            this.deptService.insertSelective(dept);
            return ResultObj.ADD_SUCCESS;
        } catch (Exception e) {
            e.printStackTrace();
            return ResultObj.ADD_ERROR;
        }
    }

    /**
     * 修改菜单
     * @param dept
     * @return
     * @RequiresPermissions 只有当用户拥有这个权限的时候才能访问这个方法
     */
    @PostMapping("updateDept")
    @RequiresPermissions("dept:update")
    public ResultObj updateDept(Dept dept){
        try {
            this.deptService.updateByPrimaryKeySelective(dept);
            return ResultObj.UPDATE_SUCCESS;
        } catch (Exception e) {
            e.printStackTrace();
            return ResultObj.UPDATE_ERROR;
        }
    }

    /**
     * 删除部门
     * @param id
     * @return
     * @RequiresPermissions 只有当用户拥有这个权限的时候才能访问这个方法
     */
    @RequestMapping("deleteDept")
    @RequiresPermissions("dept:delete")
    public ResultObj deleteDept(Integer id){
        try {
            this.deptService.deleteByPrimaryKey(id);
            return ResultObj.DELETE_SUCCESS;
        } catch (Exception e) {
            e.printStackTrace();
            return ResultObj.DELETE_ERROR;
        }
    }

    /**
     * 根据id查询
     * @param id
     * @return
     */
    @GetMapping("getDeptById")
    public Object getDeptById(Integer id){
        return new DataGridView(this.deptService.getById(id));
    }

    /**
     * 根据ID查询当前部门的子部门的个数
     * @param id
     * @return
     */
    @GetMapping("getDeptChildrenCountById")
    public Object getDeptChildrenCountById(Integer id){
        Integer count = this.deptService.getDeptChildrenCountById(id);
        return new DataGridView(count);
    }


}
